10110. Света, еще больше света

 

В университете имеется очень длинный коридор, в котором расположены в ряд n лампочек. Возле каждой лампочки находится переключатель, переводящий ее в одно из двух состояний: включено или выключено. Изначально все лампочки выключены.

Студент бегает по коридору вперед и назад, переключая лампочки. Когда студент движется с начала коридора в конец i - ый раз, то он меняет состояние только тех лампочек, номера которых делятся на i. При движении с конца коридора в начало состояние лампочек не изменяется.

Необходимо определить, горит ли n - ая лампочка после того, как студент совершит n пробежек туда - назад по коридору.

 

Вход. Каждая строка содержит количество лампочек в коридоре n (n < 232). Последняя строка содержит n = 0 и не обрабатывается.

 

Выход. Для каждого входного значения n вывести “yes”, если после n пробежек n - ая лампочка будет гореть, и “no” иначе.

 

Пример входа

3

6241

8191

0

 

Пример выхода

no

yes

no

РЕШЕНИЕ

математика

 

Анализ алгоритма

После n пробежек n - ая лампочка будет гореть, если n является полным квадратом. Поэтому в задаче достаточно проверить это единственное условие.

 

Реализация алгоритма

Для каждого входного значения n вычисляем в переменной m целую часть его квадратного корня. После чего проверяем равенство m2 = n. Если оно имеет место, то выводим “yes”, иначе “no”.

 

  while(scanf("%lf",&n),n)

  {

    m = (int)sqrt(n);

    if (fabs(m*m - n) < 1e-7) printf("yes\n");

      else printf("no\n");

  }